package com.ohs.ohsoa.system.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.github.pagehelper.PageInfo;
import com.ohs.ohsoa.system.dto.RoleDto;
import com.ohs.ohsoa.system.entity.GroupEnterprise;
import com.ohs.ohsoa.system.entity.Role;
import com.ohs.ohsoa.system.service.RoleService;
import com.ohs.ohsoa.system.vo.RoleVo;
import com.ohs.ohsoa.utils.auth.UserLoginToken;
import com.ohs.ohsoa.utils.bean.requestBean.PageParam;
import com.ohs.ohsoa.utils.bean.responseBean.ResultBean;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
 * 角色controller
 *
 * @author ccj
 * @since 2021年10月11日
 */
@UserLoginToken
@Api(value = "角色管理",tags = "角色管理")
@RestController
@RequestMapping("/role")
public class RoleController {
    @Resource
    private RoleService service;
    /**
     * 分页查询
     *
     * @author ccj
     * @since  2021年10月11日
     * @param pageParam 检索用参数
     * @return 实例对象
     */
    @UserLoginToken
    @PostMapping(value = "/selectListRole")
    @ApiOperation(httpMethod = "POST", value = "分页查询角色")
    public ResultBean<PageInfo<RoleVo>> selectListRole(@RequestBody PageParam<RoleDto> pageParam) {
        List<RoleVo> res = service.selectListRole(pageParam);
        return ResultBean.success(new PageInfo<>(res));
    }

    /**
     * 新增角色
     * @author ccj
     * @since 2021年10月11日
     * @return 实例对象
     */
    @UserLoginToken
    @PostMapping(value = "/insertRole")
    @ApiOperation(httpMethod = "POST",value = "新增角色")
    public ResultBean<?> insertRole(@RequestBody @Valid Role role, BindingResult bindingResult){
        if (bindingResult.hasErrors()) {
            return ResultBean.fail(bindingResult.getAllErrors().get(0).getDefaultMessage());
        }
        return ResultBean.success(service.insertRole(role));
    }

    /**
     * 修改角色
     * @author ccj
     * @since 2021年10月11日
     * @return 实例对象
     */
    @UserLoginToken
    @PutMapping(value = "/updateRole")
    @ApiOperation(httpMethod = "PUT",value = "修改角色")
    public ResultBean<?> updateRole(@RequestBody @Valid Role role, BindingResult bindingResult){
        if (bindingResult.hasErrors()) {
            return ResultBean.fail(bindingResult.getAllErrors().get(0).getDefaultMessage());
        }
        return ResultBean.success(service.updateRole(role));
    }

    /**
     * 删除角色
     * @author ccj
     * @since 2021年10月11日
     * @return 实例对象
     */
    @UserLoginToken
    @DeleteMapping(value = "deleteRole")
    @ApiOperation(httpMethod = "DELETE",value = "删除角色")
    public ResultBean<?> deleteRole(@RequestBody RoleDto roleDto){
        List<String> ids = roleDto.getRoleGuid();
        return ResultBean.success(service.deleteRole(ids));
    }

    /**
     * 查询所有企业
     * @author ccj
     * @since 2021年10月11日
     * @return 实例对象
     */
    @UserLoginToken
    @PostMapping(value = "selectAllEnterprise")
    @ApiOperation(httpMethod = "POST",value = "查询所有企业")
    public ResultBean<List<GroupEnterprise>> selectAllEnterprise(){
        List<GroupEnterprise> groupEnterprises = service.selectAllEnterprise();
        return ResultBean.success(groupEnterprises);
    }
}
